/**
 * @FileName Client.java
 * @Package com.designMode.prototype
 * -------------------------------------
 * @function Please write description of function
 * @Date 2016-1-5 下午4:32:47
 * -------------------------------------
 * Copyright (c) 2016,顾博君 All Rights Reserved.
 */
package com.designMode.prototype;

/**
 * @author 顾博君
 * @ClassName Client
 * @Date 2016-1-5 下午4:32:47
 * @Function 场景类
 */
public class Client {
    public static void main(String[] args) {
        System.out.println("<浅拷贝 拷贝对象引用>");
        Prototype prototype1 = new ConcretePrototype1();
        //原对象添加元素
        prototype1.addValue("value1");
        System.out.println("拷贝前的内容：" + prototype1.getValue());
        //生成拷贝对象
        Prototype copy1 = prototype1.clone();
        //原对象添加元素
        prototype1.addValue("value2");
        System.out.println("拷贝后的内容：" + copy1.getValue());
        // 因为拷贝的是引用地址，原对象添加元素，拷贝对象也添加元素

        System.out.println("\n<深拷贝 拷贝对象内容>");
        Prototype prototype2 = new ConcretePrototype2();
        //原对象添加元素
        prototype2.addValue("value1");
        System.out.println("拷贝前的内容：" + prototype2.getValue());
        //生成拷贝对象
        Prototype copy2 = prototype2.clone();
        //原对象添加元素
        prototype2.addValue("value2");
        System.out.println("拷贝后的内容：" + copy2.getValue());
        // 因为拷贝的是内容并且新建了引用，原对象添加元素，拷贝对象不会受到影响
    }
}
